自然語言分析一直是人工智慧裡相對較難得到好結果的領域,相比於圖形辨識、語音辨識等較成熟的技術,文本分析應用少的多,今天會談談筆者曾經做過的文章自動摘要的一些方法。
簡單來說文章摘要就是要將一篇長文章變成少數句子,同時又能夠不失原始文章裡面的主旨大意,以新聞例子來講,通常一篇新聞內容濃縮後就是這篇新聞的標題,因此當你想快速找到某篇新聞時,通常就可以根據標題來做快速篩選,這就是文章自動摘要的威力,尤其在資料爆炸的時代裡,如何快速找到需要的資料是很重要的一件事。
擷取式摘要
擷取式摘要是從文章中擷取出重要、富含多樣性資訊的句子出來當作摘要,這就像是學生在課本的句子上畫螢光筆一樣的意思。
生成式摘要
生成式摘要指的是根據原始文章內容大意,重新以自己的話說過一次,相比擷取式摘要,生成式摘要需重新組織大意,而產生更精簡邏輯通順的文章。
擷取式摘要常以給句子打分數作為判斷哪些句子是重要的,若句子分數越高則此句子就越可能是摘要句,以下給出一些常見的打分數方法。
高詞頻
通常文章中一個詞彙如果經常出現,可能代表這個詞彙是文章中的關鍵詞,因此如果有句子包含很多關鍵詞詞彙,這個句子就可能是摘要句。一般我們會以TF-IDF作為詞彙的分數,透過計算句子中所有詞彙分數來代表句子分數,分數最高的前幾名就是重要的摘要句。
PageRank
google曾經為了找尋網路中重要的網頁,建立一種網頁網絡,網頁跟網頁會因為引用超連結而產生關連,透過這些關聯每個網頁都會替其他網頁打分數,而網頁本身也會收到其他網頁打來的分數,然後再將收集到的分數打給其他網頁,如此重複循環到分數收斂,最後網頁分數最高者是最重要的網頁,通常被引用超連結最多的網頁分數會最高,因為所有分數都會流過此網頁,代表該網頁很重要所以才會引用。
相同概念套到文章中的句子上,句子與句子之間互相打分數,直到收斂,最後找出分數最高句子作為摘要句。
此方法關鍵點就是如何建立句子間的關聯性,還有初始化的句子分數。
submodular
該方法較為複雜,因此引用筆者以前自己寫的文章
生成式摘要須讓電腦完全讀過文章後產生句子,其難度較擷取式摘要來的更高,通常需要更大量的訓練資料來建模。
Seq2Seq
現有的生成式摘要方法普遍都是用變形版Seq2seq類神經架構,seq2seq是以RNN模型將文章進行編碼理解文義,再以另一個RNN解碼器解碼生成摘要,下圖為seq2seq範例,綠色部分為編碼器編碼句子,黃色部分為解碼器生成摘要句。
seq2seq是一種通用架構,除了可以做文章摘要,也可以做為問答系統,單看訓練資料的x和y如何設定來決定其應用。